package com.ydj.app.third.ai.yuanqi;

import lombok.Data;
import lombok.experimental.Accessors;

import java.io.Serializable;
import java.util.List;

@Data
@Accessors(chain = true)
public class YuanQiChatCompletionsReq implements Serializable {
    /** 助手 ID，必填 */
    private String assistant_id;
    /** 助手版本（仅内部开放），选填 */
    private Integer version;
    /** 调用者业务侧的用户 ID，必填，会影响智能体的数据统计，建议按实际情况填写 */
    private String user_id;
    /** 是否以流式接口的形式返回数据，默认 false，选填 */
    private Boolean stream;
    /** 默认为 published，传 preview 表示使用草稿态智能体（仅内部开放），选填 */
    private String chat_type;
    /** 会话内容，长度最多 40，按对话时间从旧到新在数组中排列，必填 */
    private List<Message> messages;

    /**
     * 单条消息结构
     */
    @Data
    @Accessors(chain = true)
    public static class Message {
        /** 消息角色，必填，取值：user / assistant，必须与上一条消息交替出现（一问一答） */
        private String role;
        /** 消息内容列表，可包含多种类型（文本、图片、文件等），必填 */
        private List<ContentItem> content;

        /**
         * 消息内容元素
         */
        @Data
        @Accessors(chain = true)
        public static class ContentItem {
            /** 内容类型，选填，可选值：text / file_url */
            private String type;
            /** 当 type 为 text 时，具体的文本内容，选填 */
            private String text;
            /** 当 type 为 file_url 时，文件信息对象，选填 */
            private FileUrl file_url;

            /**
             * 文件信息
             */
            @Data
            @Accessors(chain = true)
            public static class FileUrl {
                /** 文件格式，例如 image / video / audio / pdf / doc / txt 等，选填 */
                private String type;
                /** 文件的可访问 URL，选填 */
                private String url;
            }
        }
    }
}
